import router from "./router"
import { useUserStore } from "./store/user"
import { useMenuStore } from "./store/menu"

// 定义白名单（可以自由访问）
const whiteList = ['/login']

router.beforeEach(async (to, from, next) => {
    const userStore = useUserStore()
    const menuStore = useMenuStore()


    // 获取token
    const token = userStore.getToken
    // 判断token是否存在
    if (token) {
        if (to.path === '/login' || to.path === '/') { // 访问的是【login】或【首页】👉直接放行
            next({ path: '/' })
        } else { // 访问的不是【login】或【首页】👉需要判断权限
            // 判断权限数据是否存在
            const existPermissionCodeList = userStore.getPermissionCodeList?.length > 0
            if (existPermissionCodeList) { // 存在权限数据👉放行
                next()
            } else { // 不存在权限数据👉查询数据库中的权限数据和菜单数据
                try {
                    // 获取用户信息
                    await userStore.getUserInfo()
                    // 获取菜单数据
                    await menuStore.querySetVueRouterMenuTree(router, userStore.getUserId)
                    // 等待路由完全挂载
                    next({ ...to, replace: true })
                } catch (error) {
                    // 清空数据
                    sessionStorage.clear()
                    // 跳转登录
                    next({ path: '/login' })
                }
            }
        }
    } else {
        if (whiteList.indexOf(to.path) !== -1) { // 在白名单，放行
            next()
        } else { // 不在白名单，跳转登录
            next({ path: '/login' })
        }
    }
})